#include "db.h"
#include <muduo/base/Logging.h>

// 初始化数据库连接
MySQL::MySQL(){
    _conn = mysql_init(nullptr);
}

// 释放数据库连接资源
MySQL::~MySQL(){
    if (_conn != nullptr)
        mysql_close(_conn);
}


// 更新操作
bool MySQL::update(string sql){
    if (mysql_query(_conn, sql.c_str()))
    {
        LOG_INFO << __FILE__ << ":" << __LINE__ << ":"
                 << sql << "更新失败!";
        return false;
    }

    return true;
}

// 查询操作
MYSQL_RES *MySQL::query(string sql){
    if (mysql_query(_conn, sql.c_str()))
    {
        LOG_INFO << __FILE__ << ":" << __LINE__ << ":"
                 << sql << "查询失败!";
        return nullptr;
    }
    
    return mysql_use_result(_conn);
}

// 获取连接
MYSQL* MySQL::getConnection(){
    return _conn;
}


//连接池用到的初始化
bool MySQL::init(const string& server,const string& user,const string& passwd,int port,const string& database){
    MYSQL *p = mysql_real_connect(_conn, server.c_str(), user.c_str(),
                                  passwd.c_str(), database.c_str(), port, nullptr, 0);
    
    if (p != nullptr)
    {
        // "set names gbk" 将当前MYSQL对象编码设置成gbk显示，不影响原本数据库编码
        // C和C++代码默认的编码字符是ASCII，如果不设置，从MySQL上拉下来的中文显示？
        mysql_query(_conn, "set names gbk");
        LOG_INFO << "connect mysql success!";
    }
    else{
        LOG_INFO << "connect mysql fail!";
    }

    return p!=nullptr;
}